#pragma once

#include <vector>
#include <set>
#include <random>
#include <algorithm>
#include <iostream>
#include "Card.h"

class Cards {
public:
    enum SortType { Asc, Desc, NoSort };

    // 构造函数
    Cards() = default;
    explicit Cards(const Card& card);

    // 添加扑克牌
    void add(const Card& card);
    void add(const Cards& cards);
    void add(const std::vector<Card>& cards);

    // 一次性插入多个数据(操作符重载 <<)
    Cards& operator<<(const Card& card);
    Cards& operator<<(const Cards& cards);

    // 删除扑克牌
    void remove(const Card& card);
    void remove(const Cards& cards);
    void remove(const std::vector<Card>& cards);

    // 扑克牌的数量
    int cardCount() const;
    // 是否为空
    bool isEmpty() const;
    // 清空扑克牌
    void clear();
    
    Card takeRandomCard();
    std::vector<Card> toCardList(Cards::SortType type) const;
public:
    std::set<Card> m_cards;  // 存放扑克牌数据
    
    int generateRandomNumber(int min, int max) {
        return min + rand() % (max - min + 1);
    }
};